home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / c / amiexpress / mods / flagfile233 / flagfile.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-02-22  |  11.1 KB  |  473 lines

  1. #include <exec/types.h>
  2. #include <exec/exec.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <time.h>
  7. #include "sc:ae/CModGlue/doorheader.h"
  8. #include "sc:ae/CModGlue/glue.h"
  9. #define SM sendmessage
  10. #define sm sendmessage
  11. #define pm prompt
  12. #define PM prompt
  13. #define HK hotkey
  14. #define hk hotkey
  15. #define GU getuserstring
  16. #define gu getuserstring
  17. #define sr StripReturn
  18. char Date[12];
  19. void end(void);
  20. void GetLocal(void);
  21. void ListIt(void);
  22. void Help(void);
  23. void ViewIt(void);
  24. void StripReturn(char *s);
  25. void ViewDesc(int dirnum,char *startdate,int shortlist);
  26.  char MasterFile[200];
  27. int Reserved(char *Str,char Filter[]);
  28. int Yes=0;
  29. void FlagThem(void);
  30. void MarkNumbers(char *str);
  31. long NumList[2000];
  32. int NumChoose[2000];
  33. void ConvertDate(long);
  34. void main(int argc,char *argv[]);
  35. void LastCommand(void);
  36. void creds(void);
  37. char command[200];
  38. FILE *fi=NULL;
  39. void main(int argc,char *argv[])
  40. {
  41.   int i=0;int j;
  42.   char startdate[100];
  43.   int dirnum=0;
  44.   int shortlist=0;
  45.   strcpy(startdate,"");
  46.   if(argc!=2)
  47.   {
  48.      printf("FlagFile v2.1, written by Joseph Hodge\n");
  49.      printf("Compatible with AmiExpress v1.1u+\n");
  50.      printf("This is a type 'X' door.\n");
  51.      exit(0);
  52.   }
  53.   Register(argv[1][0]-'0');
  54.   gu(command,BB_MAINLINE);
  55.   i=0;
  56.   while(command[i]!='\0' && command[i]!=' ') i++;
  57.   if(command[i]==' ')
  58.   {
  59.     i++;
  60.     j=0;
  61.     while(command[i]!='\0' && command[i]!=' '){ startdate[j]=command[i];i++;j++; }
  62.     startdate[j]='\0';
  63.  
  64.     if(command[i]==' ')
  65.     { 
  66.       i++;   
  67.       if(command[i]=='U' || command[i]=='u')
  68.       {
  69.         dirnum=-1;
  70.       }else dirnum=atoi(&command[i]);
  71.      while(command[i]!='\0' && command[i]!=' ') i++;
  72.      if(command[i]==' ') shortlist=1;
  73.     }
  74.   }
  75.   i=0;
  76.   while(i<2000)
  77.   {
  78.     NumList[i]=-1L;
  79.     NumChoose[i]=-1;
  80.     i++;
  81.   }
  82.   ViewDesc(dirnum,startdate,shortlist); 
  83.   ShutDown();
  84.   end();
  85. }
  86. void ViewDesc(int dirnum,char *startdate,int shortlist)
  87. {
  88.   char Dir[200];
  89.   char FileName[200];
  90.   int ndir;
  91.   int Lines;
  92.   long TheDate;
  93.   int cline;
  94.   long Position;
  95.   long Ks;
  96.   int ns=0;
  97.   int broke=0;
  98.   int needflags=0;
  99.   int j,i,occurance;
  100.   int size;
  101.   int k;
  102.   long FileNum=0L;
  103.   char Numbers[200];
  104.   char Number[200];
  105.   BOOL GoodDate=FALSE;
  106.   LONG timelast;
  107.  
  108.   PutInfo(1,BB_NONSTOPTEXT);
  109.   strcpy(Numbers,"");
  110.   GU(Dir,DT_TIMELASTON);
  111.   timelast=atol(Dir);
  112.   GU(Dir,DT_LINELENGTH);
  113.   Lines=atoi(Dir);
  114.   GU(Dir,BB_CONFLOCAL);
  115.   strcat(Dir,"ndirs");
  116.   sm("",1);
  117.   if(startdate[0]=='?')
  118.   {
  119.     creds(); return;
  120.   }
  121.   fi=fopen(Dir,"r");
  122.   if(fi==NULL)
  123.   {
  124.     sm("Files are not supported in this conference.",1);
  125.     return;
  126.   }
  127.   fgets(Dir,80,fi); fclose(fi); ndir=atoi(Dir);
  128.   
  129.   if(startdate[0]=='\0')
  130.   {
  131.   ConvertDate(timelast);
  132.      sprintf(Dir,"Date as (mm-dd-yy) to begin list (Enter)=%s: ",Date);
  133.   pm(Dir,Date,8);
  134.   }else sprintf(Date,"%-8.8s",startdate);
  135.   if(Date[0]=='S' || Date[0]=='s') strcpy(Date,"");
  136.   if(Date[0]=='-')
  137.   {
  138.     i=atoi(Date);
  139.     timelast += (LONG)(i*24*60*60);
  140.     ConvertDate(timelast);
  141.   }
  142.   
  143.   sr(Date);
  144.   
  145.   if(dirnum==-1) dirnum=ndir;
  146.   if(dirnum<=0 || dirnum>ndir)
  147.   {
  148.       sprintf(Dir,"Directories: (1-%d), (Upload), (Enter)=none? ",ndir);
  149.       pm(Dir,Dir,3);
  150.   if(Dir[0]=='\0') strcpy(Dir,"Q"); 
  151.    if(Dir[0]=='U' || Dir[0]=='u') sprintf(Dir,"%d",ndir);
  152.   if(atoi(Dir)>ndir || atoi(Dir)<1 || Dir[0]=='Q' || Dir[0]=='q')
  153.   {
  154.     
  155.     if(Dir[0]=='Q' || Dir[0]=='q') return;
  156.     sm("",1);
  157.     sm("That Directory does not exist.",1);
  158.     return;
  159.   }
  160.   
  161.   ndir=atoi(Dir);
  162.   }else ndir=dirnum;
  163.   GU(Dir,BB_CONFLOCAL);
  164.   sprintf(FileName,"%sdir%d",Dir,ndir);
  165.   
  166.   if(Date[0]=='\0') ConvertDate(timelast);
  167.   i=0;j=0;occurance=0;
  168.   TheDate=0L;
  169.   strcat(Date," ");
  170.   while(Date[i]!='\0')
  171.   {
  172.       if(Date[i]<'0' || Date[i]>'9')
  173.       {
  174.         Date[i]='\0'; 
  175.         switch(occurance)
  176.         {
  177.            case 0: TheDate +=(atol(&Date[j])*32L); j=i+1; occurance +=1; break;
  178.            case 1: TheDate +=(atol(&Date[j])); j=i+1; occurance +=1; break;
  179.            case 2: TheDate +=(atol(&Date[j])*365L); j=i+1; occurance +=1; break;
  180.         }
  181.       }
  182.       i++;
  183.   }
  184.   GoodDate=FALSE;
  185.  
  186.   fi=fopen(FileName,"r"); 
  187.   if(fi==NULL)
  188.   {
  189.     sm("Error! Cannot locate that directory listing.",1);
  190.     return;
  191.   }strcpy(MasterFile,FileName);
  192.   cline = Lines-3;
  193.   Position=ftell(fi);
  194.   sm("",1);
  195.  
  196.   while(fgets(Dir,180,fi)!=NULL)
  197.   {
  198.     if(broke) goto passthru;
  199.     if(FetchKey()) 
  200.     { 
  201.       cline=0; sm("",1); sm("***break",1); 
  202.       broke=1;
  203.       if(!Yes) { fclose(fi); fi=NULL; return; }
  204.       goto passthru; }
  205.     if(!cline && !ns)
  206.     {
  207.       needflags=0;
  208.       cline=Lines-3;
  209.       sm("(Pause)...(f)lags",0);
  210.       sm(", More(Y/n/ns)? ",0);
  211.       pm("",Number,180); 
  212.       sm("A",0);
  213.       if(!strnicmp(Number,"NS",2)) { ns=1; goto passthru; }
  214.       if(Number[0]=='n' || Number[0]=='N') 
  215.       { 
  216.         broke=1; cline=0; ns=1; 
  217.         if(!Yes) {fclose(fi); fi=NULL; return; } 
  218.         goto passthru;
  219.       }
  220.       if(Number[0]=='f' || Number[0]=='F')
  221.      {
  222.       if(strlen(Number)>2)
  223.       {
  224.         k=0;
  225.         while(Number[k]!='\0') { Number[k]=Number[k+2]; k++; }
  226.       }else
  227.       {
  228.       sprintf(Number,"File#(s) to flag: (Enter)=none? ");
  229.       pm(Number,Number,200);
  230.       sm("A",0);
  231.       }        
  232.       if(Number[0]!='\0')
  233.       {
  234.          MarkNumbers(Number);}
  235.      }  
  236.     
  237.     }
  238.     else if(GoodDate && !shortlist)cline--;
  239.     
  240.     sr(Dir);
  241.  
  242. passthru:
  243.  
  244.     if(Dir[0]!='\0' && Dir[25]=='-' && Dir[28]=='-' && Dir[27]!='-')
  245.     {
  246.       FileNum +=1L;
  247.       if(FileNum==1999L)
  248.       {
  249.         i=0;
  250.         if(Yes) FlagThem();
  251.         Yes=0;
  252.         
  253.         while(i<2000)
  254.         {
  255.           NumList[i]=-1L;
  256.           NumChoose[i]=-1;
  257.           i++;
  258.         }
  259.         FileNum=1L;
  260.       }
  261.       NumList[FileNum]=Position;
  262.       if(!broke)
  263.       {
  264.         Ks=atol(&Dir[14]);
  265.         if(Ks>999L){ Ks /=1000L; size='k'; } else size='b';
  266.         
  267.        /*
  268.         if(Dir[13]=='P')
  269.         sprintf(FileName,"%4d.%-13.13s%4dK%-9.9s%s",FileNum,Dir,Ks,&Dir[22],&Dir[32]);
  270.          else
  271.         sprintf(FileName,"%4d.%-13.13s%4dK%-9.9s%s",FileNum,Dir,Ks,&Dir[22],&Dir[32]);
  272.        */
  273.         if(Dir[13]=='P')
  274.         sprintf(FileName,"%4d %-13.13s%4d%c%-9.9s%s",FileNum,Dir,Ks,size,&Dir[22],&Dir[32]);
  275.          else
  276.         sprintf(FileName,"%4d %-13.13s%4d%c%-9.9s%s",FileNum,Dir,Ks,size,&Dir[22],&Dir[32]);
  277.     
  278.         if(TheDate<=atol(&Dir[29])*365L+atol(&Dir[23])*32L+atol(&Dir[26]))
  279.         { GoodDate=TRUE; if(shortlist) cline--; }
  280.         if(GoodDate){
  281.         sm(FileName,1); needflags=1;}
  282.       
  283.      }
  284.     }else if(GoodDate && !shortlist && !broke)sm(Dir,1);
  285.     Position=ftell(fi);
  286.   }
  287.  
  288.    if(((cline && GoodDate==TRUE) || needflags) && !ns && !broke)
  289.     {
  290.    sm("(last entry)...(f)lags",0);
  291.       sm(", (Enter)=none? ",0);
  292.       pm("",Number,180); 
  293.    
  294.       sm("A",0);
  295.       if(Number[0]=='f' || Number[0]=='F')
  296.       {
  297.         if(strlen(Number)>2)
  298.       {
  299.         k=0;
  300.         while(Number[k]!='\0') { Number[k]=Number[k+2]; k++; }
  301.       }else
  302.       {
  303.       sprintf(Number,"File#(s) to flag: (Enter)=none? ");
  304.       pm(Number,Number,200);
  305.       sm("A",0);
  306.       }
  307.       if(Number[0]!='\0')
  308.       {
  309.          MarkNumbers(Number);}
  310.       
  311.      }
  312.     }
  313.   
  314.   fclose(fi); fi=NULL;
  315.   if(Yes) 
  316.   {
  317.     FlagThem();
  318.   }
  319. }
  320. void FlagThem(void)
  321. {
  322.    register int i;
  323.    register int total=0;
  324.    FILE *fi;
  325.    char image[200];
  326.    char temp[200];
  327.    fi=fopen(MasterFile,"rb");
  328.    i=1; while(i<2000)
  329.    {
  330.       if(NumChoose[i]==1 && NumList[i]>-1L)
  331.       {
  332.          
  333.          fseek(fi,NumList[i],SEEK_SET);
  334.          fgets(image,13,fi);
  335.          sr(image); total +=1;
  336.          FlagFile(image);
  337.       }
  338.       i++;
  339.    }
  340.    
  341.    fclose(fi);
  342.    sm("",1);
  343.    sprintf(temp,"%d files have been flagged",total);
  344.    sm(temp,1);
  345. }
  346. void MarkNumbers(char *str)
  347. {
  348.   char Number[200];
  349.   register int i;
  350.   register int j;
  351.   register int k;
  352.   long num=0L;
  353.   long prevnum=0L;
  354.   long t;
  355.   strcpy(Number,str);
  356.   i=0;
  357.   k=strlen(Number);
  358.   j=1;
  359.   while(i<k)
  360.   {
  361.     if(j)
  362.     {
  363.       
  364.       while(Number[i]<'0' && Number[i]>'9' && Number[i]!='\0') i++;
  365.       if(Number[i]=='\0') break; 
  366.     }
  367.     if(j) { num=atol(&Number[i]); 
  368.             if(prevnum<num && prevnum)
  369.             {
  370.               t=num; for(num=prevnum+1L;num<=t;num++)
  371.               {
  372.                 if(num>0L && num<2000L)
  373.                 {
  374.  
  375.                      NumChoose[num]=1; Yes=1;
  376.                 }
  377.               }    
  378.             }
  379.             else
  380.             {
  381.               if(num>0L && num<2000L)
  382.               {
  383.  
  384.                   NumChoose[num]=1; Yes=1;
  385.               }
  386.             }
  387.           }
  388.  
  389.     if(Number[i]==',' || Number[i]==' ' || Number[i]=='-') j=1; else j=0;
  390.     if(Number[i]=='-') prevnum=num; else prevnum=0L;
  391.     i++;
  392.   }
  393. }
  394.   
  395.  
  396. void end(void)
  397. {
  398.   if(fi!=NULL) fclose(fi);
  399.   exit(0);
  400. }
  401. void ConvertDate(long t)
  402. {
  403.   struct tm *tp;
  404.   int M,D,Y;
  405.   long tg;
  406.   char Day[4],Month[5],Year[3];
  407.   char TheTime[27];
  408.   tg=t;
  409.   tp=localtime(&tg);
  410.   sprintf(TheTime,"%s",asctime(tp));
  411.   sprintf(Day,"%.2s",&TheTime[8]);
  412.   sprintf(Month,"%.3s",&TheTime[4]);
  413.   sprintf(Year,"%.2s",&TheTime[22]);
  414.    D=atoi(Day);
  415.    Y=atoi(Year);
  416.  
  417.   if(!strncmp(Month,"Jan",3)) M=1;
  418.   if(!strncmp(Month,"Feb",3)) M=2;
  419.   if(!strncmp(Month,"Mar",3)) M=3;
  420.   if(!strncmp(Month,"Apr",3)) M=4;
  421.   if(!strncmp(Month,"May",3)) M=5;
  422.   if(!strncmp(Month,"Jun",3)) M=6;
  423.   if(!strncmp(Month,"Jul",3)) M=7;
  424.   if(!strncmp(Month,"Aug",3)) M=8;
  425.   if(!strncmp(Month,"Sep",3)) M=9;
  426.   if(!strncmp(Month,"Oct",3)) M=10;
  427.   if(!strncmp(Month,"Nov",3)) M=11;
  428.   if(!strncmp(Month,"Dec",3)) M=12; 
  429.   sprintf(Date,"%02d-%02d-%02d",M,D,Y);
  430. }
  431. void LastCommand(void)
  432. {
  433.  PutInfo(0,BB_NONSTOPTEXT);
  434.  
  435.  sm("",1);
  436. }
  437.  
  438. void StripReturn(char *s)
  439. {
  440.   register int i;
  441.   i=strlen(s)-1;
  442.   while(i>-1)
  443.   {
  444.     if(*(s+i)<=32) *(s+i)='\0'; else break;
  445.     i--;
  446.   }
  447. }
  448.  
  449. void creds(void)
  450. {
  451.   sm("",1);
  452.   sm( "           .-----------------------------------------------------.",1);
  453.   sm( "           |           Ami-Express FlagFile Version 2.1          |",1);
  454.   sm( "           |               Written by Joseph Hodge.              |",1);
  455.   sm( "           |      /X Development Team - The Silent Achievers     |",1);
  456.   sm( "           `-----------------------------------------------------'",1);
  457.   sm("",1);
  458.         sm("          Syntax: <command> <mm-dd-yy | a | s > <directory | u > [b]",1);
  459.         sm("",1);
  460.         sm("              command = sysop defined",1);
  461.         sm("",1);
  462.         sm("             mm-dd-yy = date to display from",1);
  463.         sm("                    a = display from beginning of directory",1);
  464.         sm("                    s = display since last display date",1);
  465.         sm("",1);
  466.         sm("            directory = directory number to list",1);
  467.         sm("                    u = upload directory to list",1);
  468.         sm("",1);
  469.         sm("                    b = display one line descriptions",1);
  470.         sm("",1);
  471.  
  472. }
  473.